package com.cleaningcloud.cld.service.impl;

import java.util.ArrayList;
import java.util.List;

import com.cleaningcloud.cld.domain.CldCheckTemplateIndicator;
import com.cleaningcloud.cld.domain.dto.CldCheckTemplateDto;
import com.cleaningcloud.cld.domain.vo.CldCheckTemplateVo;
import com.cleaningcloud.cld.mapper.CldCheckTemplateIndicatorMapper;
import com.cleaningcloud.common.core.utils.DateUtils;
import com.cleaningcloud.common.security.utils.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.cleaningcloud.cld.mapper.CldCheckTemplateMapper;
import com.cleaningcloud.cld.domain.CldCheckTemplate;
import com.cleaningcloud.cld.service.ICldCheckTemplateService;
import org.springframework.transaction.annotation.Transactional;

/**
 * 考核模版Service业务层处理
 * 
 * @author cleaningcloud
 * @date 2024-10-12
 */
@Service
public class CldCheckTemplateServiceImpl implements ICldCheckTemplateService 
{
    @Autowired
    private CldCheckTemplateMapper cldCheckTemplateMapper;

    @Autowired
    private CldCheckTemplateIndicatorMapper cldCheckTemplateIndicatorMapper;

    /**
     * 查询考核模版
     * 
     * @param templateId 考核模版主键
     * @return 考核模版
     */
    @Override
    public CldCheckTemplateVo selectCldCheckTemplateByTemplateId(Long templateId)
    {
        return cldCheckTemplateMapper.selectCldCheckTemplateByTemplateId(templateId);
    }

    /**
     * 查询考核模版列表
     * 
     * @param cldCheckTemplate 考核模版
     * @return 考核模版
     */
    @Override
    public List<CldCheckTemplateVo> selectCldCheckTemplateList(CldCheckTemplate cldCheckTemplate)
    {
        List<CldCheckTemplateVo> list = cldCheckTemplateMapper.selectCldCheckTemplateList(cldCheckTemplate);
        for (CldCheckTemplateVo cldCheckTemplateVo : list) {
            cldCheckTemplateVo.setIndicatorList(cldCheckTemplateIndicatorMapper.selectCldCheckTemplateIndicatorByTemplateId(cldCheckTemplateVo.getTemplateId()));
        }
        return list;
    }

    /**
     * 新增考核模版
     * 
     * @param cldCheckTemplate 考核模版
     * @return 结果
     */
    @Override
    @Transactional
    public int insertCldCheckTemplate(CldCheckTemplateDto cldCheckTemplate)
    {
        cldCheckTemplate.setCreateTime(DateUtils.getNowDate());
        cldCheckTemplate.setCreateId(SecurityUtils.getUserId());
        cldCheckTemplate.setCreateName(SecurityUtils.getUsername());
        cldCheckTemplate.setFlag(0L);
        cldCheckTemplateMapper.insertCldCheckTemplate(cldCheckTemplate);
        // 新增模版指标明细
        batchTemplateIndicatorInsert(cldCheckTemplate);
        return 1;
    }

    /**
     * 修改考核模版
     * 
     * @param cldCheckTemplate 考核模版
     * @return 结果
     */
    @Override
    @Transactional
    public int updateCldCheckTemplate(CldCheckTemplateDto cldCheckTemplate)
    {
        cldCheckTemplate.setUpdateTime(DateUtils.getNowDate());
        cldCheckTemplate.setUpdateId(SecurityUtils.getUserId());
        cldCheckTemplate.setUpdateName(SecurityUtils.getUsername());
        // 删除之前绑定
        cldCheckTemplateIndicatorMapper.deleteTemplateIndicatorByTemplateId(cldCheckTemplate.getTemplateId());
        // 新增模版指标明细
        batchTemplateIndicatorInsert(cldCheckTemplate);
        return cldCheckTemplateMapper.updateCldCheckTemplate(cldCheckTemplate);
    }

    public void batchTemplateIndicatorInsert(CldCheckTemplateDto cldCheckTemplate){
        if(cldCheckTemplate.getIndicatorList() != null && !cldCheckTemplate.getIndicatorList().isEmpty()){
            cldCheckTemplate.getIndicatorList().forEach( item -> {
                item.setTemplateId(cldCheckTemplate.getTemplateId());
            });
            cldCheckTemplateIndicatorMapper.batchTemplateIndicatorInsert(cldCheckTemplate.getIndicatorList());
        }
    }

    /**
     * 批量删除考核模版
     * 
     * @param templateIds 需要删除的考核模版主键
     * @return 结果
     */
    @Override
    public int deleteCldCheckTemplateByTemplateIds(Long[] templateIds)
    {
        return cldCheckTemplateMapper.deleteCldCheckTemplateByTemplateIds(templateIds);
    }

    /**
     * 删除考核模版信息
     * 
     * @param templateId 考核模版主键
     * @return 结果
     */
    @Override
    public int deleteCldCheckTemplateByTemplateId(Long templateId)
    {
        return cldCheckTemplateMapper.deleteCldCheckTemplateByTemplateId(templateId);
    }
}
